Welcome to pandas!

3.12 DataFrame逻辑统计函数学习

前面学习过逻辑运算符&和|,专门应用于逻辑布尔值之间的运算,但布尔值比较多,

就会产生一些问题,pandas和numpy中均有多个布尔值进行与、或运算的函数

逻辑运算方式 pandas numpy 注释
逻辑与 all np.all Series中所有的布尔值为Ture,则返回Ture,否则返回False
逻辑或 any np.any Series中有一个元素布尔值为Ture,则返回Ture,全部为False则返回False

import pandas as pd

s=pd.Series([ 45,65,78 ])

print ((s[0]> 50 )&(s[ 1 ]> 50 )&(s[ 1 ]> 50 ) )

t=(s> 50 ).all()

print (t)

返回:

False

False


import pandas as pd

s=pd.Series([ 45,65,78 ])

print ((s[0]> 50 )|(s[1]> 50 )|(s[1]> 50 ) )

t=(s> 50 ).any()

print (t)

返回:

True

True


如果布尔值是在DataFrame表格内,使用all()和any()函数对整个表进行逻辑判断统计也是一样的,

但如果要对DateFrame表格中的布尔值按行或列按判断统计,那么就要在函数中使用axis参数来确定方向


import pandas as pd,numpy as np

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\测试素材.考试成绩.逻辑统计.xlsx" )

df[ "是否达标" ]=np.where((df.iloc[:, 1 :]>95).any( axis = 1 ), "√","Ⅹ" )

arr=np.where((df.iloc[:, 1:4 ]> 80 ).all( axis = 0 ), "√","Ⅹ" )

ts=np.concatenate([np.array([ "是否达标" ]),arr,np.array([""])])

df.loc[ len (df)]=ts

print (df)

返回:

姓名 数学 语文 英语 是否达标
0 小明 85.5 67 84
1 小张 89.0 100 34
2 小王 95.0 55 76
3 小李 88.5 95 99
4 小四 99.0 43 73
5 小管 100.0 66 65
6 是否达标